package com.gduf.lsm.mapper;

import com.gduf.lsm.common.annotation.AutoFill;
import com.gduf.lsm.common.enums.OperationType;
import com.gduf.lsm.entity.ApplyMental;
import com.gduf.lsm.pojo.dto.ApplyServeStatusDTO;
import com.gduf.lsm.pojo.vo.ApplyMentalShowVO;
import com.gduf.lsm.pojo.vo.EvaluationVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 操作apply_maintain相关数据接口
*/
@Mapper
public interface ApplyMentalMapper {

    /**
     * 新增
     * @param applyMental
     * @return
     */
    @AutoFill(value = OperationType.INSERT)
    int insert(ApplyMental applyMental);

    /**
     * 删除
     * @param id
     * @return
     */
    int deleteById(Integer id);

    /**
     * 修改
     * @param applyMental
     * @return
     */
    @AutoFill(value = OperationType.UPDATE)
    int updateById(ApplyMental applyMental);

    /**
     * 管理员处理‘已预约’
     * @param applyServeStatusDTO
     */
    @AutoFill(value = OperationType.UPDATE)
    void updateHandle(ApplyServeStatusDTO applyServeStatusDTO);

    /**
     * 根据ID查询
     * @param id
     * @return
     */
    @Select("select * from apply_num where id=#{id}")
    ApplyMental selectById(Integer id);

    /**
     * 查询所有
     * @param applyMental
     * @return
     */
    List<ApplyMental> selectAll(ApplyMental applyMental);

    /**
     * 分页查询
     * 有对应VO
     * @param applyMental
     * @return
     */
    List<ApplyMentalShowVO> selectPageQuery(ApplyMental applyMental);

    /**
     * 修改表单状态
     * 已投诉，已处理
     * @param applyServeStatusDTO
     */
    @AutoFill(value = OperationType.UPDATE)
    void updateStatus(ApplyServeStatusDTO applyServeStatusDTO);

    /**
     * 用户已评价
     * @param applyServeStatusDTO
     */
    @AutoFill(value = OperationType.UPDATE)
    void updateEvaluation(ApplyServeStatusDTO applyServeStatusDTO);

    /**
     * 获取评价
     * @return
     */
    List<EvaluationVO> getEvaluations();

    /**
     * 计算评价分数平均分
     * @return
     */
    @Select("select avg(grade) from apply_mental")
    float calGrade();
}